ValueStack(值栈)
贯穿整个Action的生命周期,每个Action类的对象实例都拥有一个ValueStack对象,相当于一个数据的中转站,在其中保存当前Action对象和其他相关对象
Struts框架把ValueStack对象保存在名为”struts.valueStack”的请求属性中
在ValueStack对象的内部有两个逻辑部分:
context:ContextMap(Map栈实际上是OgnlContext类型,是一个Map,也是对ActionContext的一个引用)
Struts把各种各样的映射关系(一些Map类型的对象)压入ContextMap中,实际上是对ActionContext的一个引用。Struts会把下面这些映射压入到ContextMap中:
- parameters:该Map中包含当前请求的请求参数
- request:该Map中包含当前request对象中的所有属性
- session:该Map中包含当前session对象的所有属性
- application:该Map中包含当前application对象中的所有属性
- attr:该Map按如下顺序检索某个属性:request、session、application
root:ObjectStack(对象栈,实际上是CompoundRoot类型,是一个使用ArrayList定义的栈,里面保存各种和当前Action实例相关的对象,是一个数据结构意义的栈)
Struts把Action和相关对象压入ObjectStack中。
在JSP页面上可以使用OGNL(Object-Graph-Navigation-Language:对象-图导航语言)访问到值栈中的对象属性
若希望访问到ContextMap中的数据,需要给OGNL表达式加上一个前缀字符#,如果没有前缀字符,搜索将在ObjectStack里进行
可以从ActionContext中获取值栈对象